package com.powernode.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.powernode.domain.ProdProp;
import com.powernode.domain.ProdPropValue;
import com.powernode.service.ProdPropService;
import com.powernode.mapper.ProdPropMapper;
import com.powernode.service.ProdPropValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 *
 */
@Service
public class ProdPropServiceImpl extends ServiceImpl<ProdPropMapper, ProdProp>
        implements ProdPropService {


    @Autowired
    private ProdPropMapper prodPropMapper;
    @Autowired
    private ProdPropValueService prodPropValueService;

    @Override
    public Page<ProdProp> getProdPropPage(Page<ProdProp> page, ProdProp prodProp) {
        prodPropMapper.selectPage(page, new LambdaQueryWrapper<ProdProp>()
                .like(StringUtils.hasText(prodProp.getPropName()), ProdProp::getPropName, prodProp.getPropName()));
        //通过获得到属性值

        List<ProdProp> records = page.getRecords();
        if (!CollectionUtils.isEmpty(records)) {
            //得到所有的商品id
            List<Long> prodIds = records.stream().map(ProdProp::getPropId).collect(Collectors.toList());
            //查询在这个id范围内的索引属性
            List<ProdPropValue> prodPropValues = prodPropValueService.list(new LambdaQueryWrapper<ProdPropValue>()
                    .in(ProdPropValue::getPropId, prodIds));

            //过滤
            records.forEach(prop->{
                List<ProdPropValue> propValues = prodPropValues.stream()
                        .filter(prodPropValue -> prodPropValue.getPropId().equals(prop.getPropId())).collect(Collectors.toList());
                prop.setProdPropValues(propValues);
            });
            }



        return page;
    }

    @Override
    @Transactional
    public void addProdPropValue(ProdProp prodProp) {
        //插入到prodprop中
        prodPropMapper.insert(prodProp);
        //通过id在关联prodpropvalue表
        List<ProdPropValue> prodPropValues = prodProp.getProdPropValues();
        prodPropValues.forEach(prodValue -> {
            prodValue.setPropId(prodProp.getPropId());
        });
        prodPropValueService.saveBatch(prodPropValues);
    }
}




